如何來控制query?
首先讓我們來看一個簡單的範例,在Laravel中不需要定義伺服器連線物件
我們只要選定我們的資料表就可以取得一個表內的所有資料
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
public function index()
{
$users = DB::table('users')->get();
return view('user.index', ['users' => $users]);
}
}
?>
而從中又衍伸以下的寫法
<?php
//取得users表中name為John的第一筆資料
DB::table('users')->where('name', 'John')->first();
//取得users表中name為John的email欄位值
DB::table('users')->where('name', 'John')->value('email')
//取得users表中的第3筆資料
DB::table('users')->find(3);
//取得users表中特定欄位的資料
DB::table('users')->pluck('title', 'name');
//取得users表中按id排序的100筆資料
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
foreach ($users as $user) {
...
return false; //如果想在執行中停止可以回傳false
}
});
//lazy有點像chunk,但它只會回傳統計的結果
DB::table('users')->orderBy('id')->lazy()->each(function ($user) {
//
});
//users的資料總筆數,可換成以下方法 max, min, avg, sum
DB::table('users')->count();
//求出orders 欄位finalized為1 並求全部price的平均值
DB::table('orders')->where('finalized', 1)->avg('price');
//回傳 true 或 false 目標資料存不存在
DB::table('orders')->where('finalized', 1)->exists()
DB::table('orders')->where('finalized', 1)->doesntExist()
//取得users的資料且特別定義欄位的名稱
DB::table('users')->select('name', 'email as user_email')->get();
//所有欄位相同的資料只取出現1次
DB::table('users')->distinct()->get();
//在Users顯示搜尋結果時額外顯示自訂欄位和內容
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
//取得users有count的統計查詢結果
DB::table('users')->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)->groupBy('status')->get();
//將price按照參數和公式變成查詢結果
DB::table('orders')->selectRaw('price * ? as price_with_tax', [1.0825])->get();
//若state的資料為TX且price大於200就取得該筆,若state不等於TX且price大於100取得該筆(orWhereRaw)
DB::table('orders')->whereRaw('price > IF(state = "TX", ?, 100)', [200])->get();
//若price總和大於2500就取得該筆統計資料(orHavingRaw)
DB::table('orders')->select('department', DB::raw('SUM(price) as total_sales'))
->groupBy('department')->havingRaw('SUM(price) > ?', [2500])->get();
//同意思為order by updated_at - created_at DESC
DB::table('orders')->orderByRaw('updated_at - created_at DESC')->get();
//同意思為group by city state
DB::table('orders')->select('city', 'state')->groupByRaw('city, state')->get();
?>